/**
 * 
 */
package servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import metier.Utilisateur;

import org.apache.log4j.Logger;

import persistence.Strategie;
import persistence.DAO.SQL.entities.DAOSQLUtilisateur;


/**
 * @author hozakan
 *
 */
public class GetLoged extends BaseServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3129289814125147661L;
	private static final Logger LOGGER = Logger.getLogger(GetLoged.class);

	/* (non-Javadoc)
	 * @see servlets.BaseServlet#specificDoGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	protected void specificDoGet(HttpServletRequest request,
			HttpServletResponse response) {
	}

	@Override
	protected void specificDoPost(HttpServletRequest request,
			HttpServletResponse response) {

		String userName = (String) request.getParameter("j_username");
		String userPwd = (String) request.getParameter("j_password");
		String forward = "/pages/login.jsp";
		if (LOGGER.isDebugEnabled()) {
			LOGGER.debug("avant tentative de connexion");
		}
		
		if (!(userName == null || userName.equals(""))  && !(userPwd == null || userPwd.equals(""))) {
			Utilisateur user = ((DAOSQLUtilisateur)Strategie.getInstance().getDAOFactory().getDAO(new Utilisateur())).verifier(userName, userPwd);
			request.getSession(false).setAttribute("user", user);
			if (user != null) {
			    if (LOGGER.isDebugEnabled()) {
			    	LOGGER.debug("détails de l'utilisateur une fois trouvé en base :");
			    	LOGGER.debug("nom : "+user.getNom());
			    	LOGGER.debug("prenom : "+user.getPrenom());
			    	LOGGER.debug("login : "+user.getLogin());
			    	LOGGER.debug("rang : "+user.getRang());
		    	}
		    }
			if (LOGGER.isDebugEnabled()) {
				LOGGER.debug("tentative réussie");
			}
			
			String redirect = (String) request.getSession().getAttribute("redirect");
			if (LOGGER.isDebugEnabled()) {
				LOGGER.debug("redirect ressemble à : "+redirect);
			}
			if (redirect == null) {
				try {
					new GoToIndex().doGet(request, response);
				} catch (IOException e) {
					LOGGER.error("L'accès à la page demandé n'est pas possible");
				} catch (ServletException e) {
					LOGGER.error("Impossible d'accéder à la resource demandée");
				}
			} else if (redirect.equals("/administration")) {
				if ("administrateur".equals(user.getRang())) {
					if (LOGGER.isDebugEnabled()) {
						LOGGER.debug("l'utilisateur est administrateur");
					}
					try {
						new GoToAdministration().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				} else {
					try {
						new GoToIndex().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				}
			} else {
//				System.out.println("redirection classique");
//				redirect = redirect.substring(1, redirect.length());
//				System.out.println(redirect);
//				String firstLetter = redirect.substring(0, 1);
//				System.out.println(firstLetter);
//				firstLetter = firstLetter.toUpperCase();
//				System.out.println(firstLetter);
//				redirect = redirect.substring(1, redirect.length());
//				System.out.println(redirect);
//				redirect = "servlets.GoTo"+firstLetter+redirect;
//				System.out.println(redirect);
//				System.out.println("tête de redirect après modif : "+redirect);
//				System.out.println("tête de GoToVolley.class : "+GoToVolley.class);
//				try {
//					Class clazz = Class.forName(redirect);
//					//BaseServlet servlet = (BaseServlet) clazz.newInstance();
//					if (redirect.equals(GoToBasket.class)) {
//						System.out.println("redirection basket");
//						((GoToBasket)clazz.newInstance()).doGet(request, response);
//					} else if (redirect.equals(GoToIndex.class)) {
//						System.out.println("redirection index");
//						((GoToIndex)clazz.newInstance()).doGet(request, response);
//					} else if (redirect.equals(GoToLogin.class)) {
//						System.out.println("redirection login");
//						((GoToLogin)clazz.newInstance()).doGet(request, response);
//					} else if (redirect.equals(GoToMotoGP.class)) {
//						System.out.println("redirection motoGP");
//						((GoToMotoGP)clazz.newInstance()).doGet(request, response);
//					} else if (redirect.equals(GoToVolley.class)) {
//						System.out.println("redirection volley");
//						((GoToVolley)clazz.newInstance()).doGet(request, response);
//					}
//					//servlet.doGet(request, response);
//				} catch (ServletException e) {
//					LOGGER.error("Impossible d'accéder à la resource demandée");
//				} catch (IOException e) {
//					LOGGER.error("L'accès à la page demandé n'est pas possible");
//				} catch (ClassNotFoundException e) {
//					LOGGER.error("Le servlet demandé n'existe pas");
//				} catch (InstantiationException e) {
//					LOGGER.error("Impossible d'instancier le servlet");
//				} catch (IllegalAccessException e) {
//					LOGGER.error("Impossible d'accéder au constructeur du servlet");
//				}
				//C'est pas aussi générique qu'on le voudrait!!! :'(
				if (redirect.equals("/index")) {
					try {
						new GoToIndex().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				} else if (redirect.equals("/basket")) {
					try {
						new GoToBasket().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				} else if (redirect.equals("/motoGP")) {
					try {
						new GoToMotoGP().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				} else if (redirect.equals("/volley")) {
					try {
						new GoToVolley().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				} else if (redirect.equals("/login")) {
					try {
						new GoToLogin().doGet(request, response);
					} catch (IOException e) {
						LOGGER.error("L'accès à la page demandé n'est pas possible");
					} catch (ServletException e) {
						LOGGER.error("Impossible d'accéder à la resource demandée");
					}
				}
			}
		} else {
			if (LOGGER.isDebugEnabled()) {
				LOGGER.debug("tentative échouée");
			}
			List<String> errors = new ArrayList<String>();
			errors.add("Tentative refusée");
			try {
				request.getRequestDispatcher(forward).forward(request, response);
			} catch (ServletException e) {
				LOGGER.error("Impossible d'accéder à la resource demandée");
			} catch (IOException e) {
				LOGGER.error("L'accès à la page demandé n'est pas possible");
			}
		}
	}

}
